其他
如何使用 Python 操作 Git 代码?GitPython 入门介绍
点击上方 "码农真经" 关注公众号,星标或者置顶
00点准时推送,第一时间送达
作者:匿蟒 | 编辑:真经君
链接:note.qidong.name/2018/01/gitpython
上一篇:突发!51信用卡被爆遭浙江本地警方介入 现场警车云集
git
命令,另一部分依赖于GitDB。.git/objects
建立了一个数据库模型,可以实现直接的读写。由于采用流式(stream)读写,所以运行高效、内存占用低。git
命令需要额外安装。init
repo = git.Repo.init(path='.')
git.Repo
实现了__enter__
与__exit__
,所以可以与with
联合使用。# do sth with repo
clone
commit
fobj.write('1st line
')
repo.index.add(items=['test.file'])
repo.index.commit('write a line into test.file')
with open('test.file', 'aw') as fobj:
fobj.write('2nd line
')
repo.index.add(items=['test.file'])
repo.index.commit('write another line into test.file')
status
git status
,而是给出了部分的信息。False
>>> with open('test.file', 'aw') as fobj:
>>> fobj.write('dirty line
')
>>> repo.is_dirty()
True
[]
>>> with open('untracked.file', 'w') as fobj:
>>> fobj.write('')
>>> repo.untracked_files
['untracked.file']
checkout(清理所有修改)
True
>>> repo.index.checkout(force=True)
<generator object <genexpr> at 0x7f2bf35e6b40>
>>> repo.is_dirty()
False
branch
head.checkout()
# or
git.Head.delete(repo, 'new_head')
merge
other
),merge另一个分支(master
)。other = repo.create_head('other', 'HEAD^')
other.checkout()
repo.index.merge_tree(master)
repo.index.commit('Merge from master to other')
remote, fetch, pull, push
remote.fetch()
remote.pull()
remote.push()
# or
repo.delete_remote('gitlab')
其它
git
操作。git.status()
git.checkout('HEAD', b="my_new_branch")
git.branch('another-new-one')
git.branch('-D', 'another-new-one')
subprocess
subprocess.call(['git', 'status'])
pygit2
《GitPython Documentation》 《Welcome to GitDB’s documentation!》 《Git - 底层命令 (Plumbing) 和高层命令 (Porcelain)》 《GitPython | Hom》
git.Repo
中对context相关接口的实现如下:return self
def __exit__(self, exc_type, exc_value, traceback):
self.close()
def __del__(self):
try:
self.close()
except:
pass
def close(self):
if self.git:
self.git.clear_cache()
gc.collect()
gitdb.util.mman.collect()
gc.collect()
git.
Repo
的instance进行读写操作。--END--
往日热文:
Python之路点燃编程圈:源于不爽C语言,单枪匹马搞副业,如今吞噬世界
喜欢本文的朋友们,欢迎长按下图关注订阅号码农真经
收看更多精彩内
你在看吗?一起成长